#include "iic_drv.h"

void IIC_Start(void)
{
    SDA_H;
    SCL_H;
    HAL_Delay(2);
    SDA_L;
    HAL_Delay(2);
    SCL_L;
}
void SDA_Write_Mode(void)
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = GPIO_PIN_10;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void SDA_Read_Mode(void)
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = GPIO_PIN_10;
  GPIO_InitStruct.Mode =  GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void IIC_Send_Byte(const uint8_t byte)
{
    uint8_t msk_byte=0x80;
    for(uint8_t i=0;i<8;i++)
    {
        
        if(byte&msk_byte)
        {   
            SDA_H;
        }
        else
        {
            SDA_L;
        }
				SCL_H;
				HAL_Delay(2);
        SCL_L;
				HAL_Delay(2);
        msk_byte>>=1;
				

    }
}
uint8_t IIC_Wait_Ack(void)
{

		SDA_H;
	  HAL_Delay(2);
    SCL_H;
    HAL_Delay(2);
    if(!READ_SDA)
    {
        SCL_L;
        return 1;
    }
    else
    {

        SCL_L;
        return 0;
    }
}
uint8_t IIC_Recv_Byte(void)
{
    uint8_t byte=0x00;
		uint8_t msk_byte=0x80;
    for(uint8_t i=0;i<8;i++)
    {
			SCL_H;
			HAL_Delay(1);
			if(READ_SDA)
			{
				byte|=msk_byte;	
			}
			msk_byte>>=1;
			SCL_L;
			HAL_Delay(1);				

    }
		return byte;
}
void IIC_Stop(void)
{
    SDA_L;
    HAL_Delay(1);
    SCL_H;
    HAL_Delay(1);
    SDA_H;
    HAL_Delay(1);
    SCL_L;
}


